﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.ServiceModel.DomainServices.Hosting;
using System.ServiceModel.DomainServices.Server;
using System.ServiceModel.DomainServices.Server.ApplicationServices;

namespace Galnote.Web
{
	/// <summary>
	/// 金星身份验证的域服务。
	/// </summary>
	[EnableClientAccess]
	public class GalnoteAuthenticationDomainService : AuthenticationBase<AuthUser>
	{
		/// <summary>
		/// 验证指定的用户名和密码是否有效。
		/// </summary>
		/// <param name="userName">要验证的用户名。</param>
		/// <param name="password">要验证的密码。</param>
		/// <returns>如果用户名和密码有效，返回 <c>true</c>；否则返回 <c>false</c>。</returns>
		protected override bool ValidateUser(string userName, string password)
		{
			// 从后台数据库查询用户名和密码都匹配的用户，如果找到则说明登录成功。
			using (var context = new GalnoteModelContainer())
			{
				var result = from i in context.UserSet
							 where i.Name == userName && i.Password == password
							 select i;

				return result.Count() != 0;
			}
		}

		/// <summary>
		/// 获得验证后的用户对象。
		/// </summary>
		/// <param name="principal">要获得用户对象的用户账户信息。</param>
		/// <returns>验证后的用户对象。</returns>
		protected override AuthUser GetAuthenticatedUser(System.Security.Principal.IPrincipal principal)
		{
			var result = base.GetAuthenticatedUser(principal);

			// 追加用户角色信息。
			result.Roles = result.GetUser().Roles.ToRoleNames();

			return result;
		}
	}

	/// <summary>
	/// 表示一个用于身份验证的用户信息。
	/// </summary>
	public class AuthUser : UserBase
	{
	}

}